home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / util / shell / ShellScr.lha / ShellScr / src / paths.e < prev    next >
Encoding:
Text File  |  1997-12-15  |  2.2 KB  |  89 lines

  1. -> For copying DOS command paths
  2. -> Used in ShellScr by Kyzer/CSG
  3. ->
  4. -> Based on dospath.library source by Stefan Becker
  5.  
  6. OPT PREPROCESS,MODULE
  7.  
  8. MODULE 'dos/dos', 'dos/dosextens',
  9.        'exec/memory', 'exec/tasks', 'exec/nodes', 'exec/ports', 
  10.        'workbench/startup'
  11.  
  12. EXPORT OBJECT pathlist
  13.   next -> BPTR to another pathlist structure or NIL
  14.   lock -> BPTR to filelock
  15. ENDOBJECT
  16.  
  17. EXPORT PROC getpath() RETURN MKBADDR(copypathlist(getpathlist(IF wbmessage THEN getwbtask(wbmessage) ELSE FindTask(NIL))))
  18.  
  19. EXPORT PROC getwbtask(wbmsg:PTR TO wbstartup)
  20.   DEF port:PTR TO mp, task=NIL
  21.   IF port:=wbmsg.message.replyport THEN task:=port.sigtask
  22.   IF task=NIL THEN task:=FindTask('Workbench')
  23. ENDPROC task
  24.  
  25. PROC getcli(p:PTR TO ln) RETURN IF (p<>NIL) AND (p.type=NT_PROCESS) THEN BADDR(p::process.cli) ELSE NIL
  26.  
  27. EXPORT PROC getpathlist(proc:PTR TO process)
  28.   DEF cli:PTR TO commandlineinterface; cli:=getcli(proc)
  29. ENDPROC IF cli THEN BADDR(cli.commanddir) ELSE NIL
  30.  
  31. /***
  32. EXPORT PROC setpathlist(proc,paths)
  33.   DEF old=0
  34.   DEF cli:PTR TO commandlineinterface; cli:=getcli(proc)
  35.   IF cli
  36.     old:=BADDR(cli.commanddir)
  37.     IF paths THEN cli.commanddir:=MKBADDR(paths)
  38.   ENDIF
  39. ENDPROC old
  40. ***/
  41.  
  42. EXPORT PROC copypathlist(orig:PTR TO pathlist)
  43.   DEF current=NIL:PTR TO pathlist,
  44.       head=NIL:   PTR TO pathlist,
  45.       next=NIL:   PTR TO pathlist, lock
  46.  
  47.   WHILE orig
  48.     IF next=NIL THEN next:=AllocVec(SIZEOF pathlist, MEMF_PUBLIC)
  49.     IF next
  50.       IF lock:=DupLock(orig.lock)
  51.         next.next:=NIL
  52.         next.lock:=lock
  53.         IF head=NIL THEN head:=next
  54.         IF current THEN current.next:=MKBADDR(next)
  55.         current:=next
  56.         next:=NIL
  57.       ENDIF
  58.     ELSE
  59.       freepathlist(head)
  60.       RETURN NIL
  61.     ENDIF
  62.     orig:=BADDR(orig.next)
  63.   ENDWHILE
  64.  
  65.   IF next THEN FreeVec(next)
  66. ENDPROC head
  67.  
  68. EXPORT PROC freepathlist(next:PTR TO pathlist)
  69.   DEF current:PTR TO pathlist
  70.   WHILE current:=next
  71.     next:=BADDR(current.next)
  72.     UnLock(current.lock)
  73.     FreeVec(current)
  74.   ENDWHILE
  75. ENDPROC
  76.  
  77. /***
  78. EXPORT PROC listpathlist(next:PTR TO pathlist)
  79.   DEF str[4096]:STRING
  80.   WHILE next
  81.     IF NameFromLock(next.lock,str,StrMax(str))
  82.       SetStr(str,StrLen(str))
  83.       WriteF('\s\n',str)
  84.     ENDIF
  85.     next:=BADDR(next.next)
  86.   ENDWHILE
  87. ENDPROC
  88. ***/
  89.